
define([
        'Util',
        'text!tpl/requirement/addRequirement.tpl',
        'select',
        'date',
        'form',
        'dialog',
        'jquery',
        'checkboxes',
        'validator',
        'loading',
        'radios',
        'upload',
        'list',
        'cookie',
        'inputTag',
        '../common/getPath',
        '../common/dateDiff',
        '../requirement/fileList',
        'comboSelect',
    ],
    function (Util, tpl, Select, MyDate, Form, Dialog, $, Checkboxes, Validator, Loading,Radios,Upload,List,$cookie,inputTag, AjaxPath,computeDaysDelta,fileList,ComboSelect) {
        require(['style!css/style.css']);

        //系统变量-定义该模块的根节点
        var $el = null;
        var _indexModule = null,
            tabParent = null,
            addRequrementData = null,
            addReqValidation = null,
            tagListSelect = null,
            linksToSelect = null,
            relateToSelect = null,
            moduleListSelect = null,
            delFlag = false,
            radios = null,
            sysTemSelect = null,
            addReqType = null,
            reqAttachmentIdList = [],
            statusChangeSelect = null,
            tryPeopleChangeSelect= null,
            presentPeopleChangeSelect= null,
            addPriStatusSelsect = null,
            presentPeopleSelect = null,
            sprintsChangeSelect = null,
            tagListSelectList = [],
            comboSelect = null,
            loadingConfig=null,
            severity = null,
            defectReason = null,
            defectStatusChangeSelect = null,
            findesprintsChangeSelect = null;
        //系统变量-构造函数
        var initialize = function(indexModule, options, tabItem) {
            reqAttachmentIdList = [];
            $el = $(tpl);
            _indexModule = indexModule;
            $(tabItem).on("tabActive", function() {
                tabItem.show(true); //刷新表单
            });
            createLoading();
            addRequrementData = options;
            tabParent = tabItem;
            eventInit();
            this.content = $el;
            inSelect();
            initDate();
            fileUp();
            selMul();
            addRequireValidation();

        };


        //业务代码-事件初始化
        var eventInit = function() {
            $el.on('click', '.addRequireBtn', saveRequiretValidation);
            $el.on('click', '.btnBack', back);
        };

        var back = function() {
            tabParent.switchTab(addRequrementData.menuId);
            tabParent.destroy("addReqTab");
        };
        var switchTab = function(index) {
            $(".t-tabs-items li", $el).eq(index).trigger('click');
        }

        var inSelect = function() {
            //归属项目
            Util.ajax.getJson( AjaxPath.project+"/dropdown?modual=project&type=getProjectsByUser&userId=" + $cookie.get("userId"), {}, function(result, isok){
                sysTemSelect = new ComboSelect({
                    el:$('#requireFrom',$el),       //要绑定的容器
                    name:'systemId',    //下拉框单元添加name属性
                    textField: 'value',
                    valueField: 'key',
                    loadAtClick:false,
                    datas: result.beans         //数据源与url模式可二选一
                });
                sysTemSelect.setValue("" + $cookie.get("projectSelectId"));
                selectChange(sysTemSelect.getSelected().key);
                sysTemSelect.disabled();
                sysTemSelect.change(function(e){
                    selectChange(sysTemSelect.getSelected().key);
                });
            });
            //工作项类型
            Util.ajax.getJson( AjaxPath.project+"/dropdown?modual=require&type=requireType", {}, function(result, isok){
                addReqType = new Select({
                    el:$("#requireType", $el),       //要绑定的容器
                    ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                        method:'GET'
                    },
                    label:'<i style="color:red;padding:2px;">*</i>类型:', //下拉框单元左侧label文本，可不配置
                    selectText:false,       //是否显示  ‘选择|清除’  模式
                    name:'requireType',    //下拉框单元右侧下拉框名称
                    disabled:false,     //组件是否被禁用
                    topOption:"请选择", //设置最顶部option的text属性
                    value:'',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                    textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                    valueField:"key",//设置下拉框value，填写数据中对应的字段名
                    datas: result.beans,         //数据源
                    loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                    dataReady:function(){
                        console.log("获取工作项类型");
                    }
                });

                addReqType.setValue(['key','1']);
                addReqType.on("change",function(e,valueObj){
                    if(valueObj.key === 4){
                        $("#requireType", $el).removeClass("clearfix").css("float","left");
                        $("#severity", $el).show();
                        $("#findSprintList", $el).show();
                        $(".defectShow", $el).show();
                        $(".defectHide", $el).hide();
                        $("#sprintList label", $el).html("修复迭代:");
                        $("#statusList select", $el).removeAttr("name");
                        $("#defectStatusList select", $el).attr("name", "status");
                    } else {
                        $("#requireType", $el).addClass("clearfix").css("float","none");
                        $("#severity", $el).hide();
                        $("#findSprintList", $el).hide();
                        $(".defectShow", $el).hide();
                        $(".defectHide", $el).show();
                        $("#sprintList label", $el).html("迭代:");
                        $("#defectStatusList select", $el).removeAttr("name");
                        $("#statusList select", $el).attr("name", "status");
                    }
                });
            });
            //严重程度
            Util.ajax.getJson( AjaxPath.project+"/dropdown?modual=defect&type=importance", {}, function(result, isok){
                severity = new Select({
                    el:$("#severity", $el),       //要绑定的容器
                    ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                        method:'GET'
                    },
                    label:'<i style="color:red;padding:2px;">*</i>严重程度:', //下拉框单元左侧label文本，可不配置
                    selectText:false,       //是否显示  ‘选择|清除’  模式
                    name:'severity',    //下拉框单元右侧下拉框名称
                    disabled:false,     //组件是否被禁用
                    topOption:"请选择", //设置最顶部option的text属性
                    value:'',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                    textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                    valueField:"key",//设置下拉框value，填写数据中对应的字段名
                    datas: result.beans,         //数据源
                    loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                    dataReady:function(){
                        console.log("获取工作项类型");
                    }
                });
                severity.setValue(['key','1']);
            });            
            //状态
            Util.ajax.getJson( AjaxPath.project+'/dropdown?modual=require&type=requireStatus&flowSwitch=true&systemId=', {}, function(result, isok){
                statusChangeSelect = new Select({
                    el:$("#statusList", $el),       //要绑定的容器
                    ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                        method:'GET'
                    },
                    label:'<i style="color:red;padding:2px;">*</i>状态:', //下拉框单元左侧label文本，可不配置
                    selectText:false,       //是否显示  ‘选择|清除’  模式
                    name:'status',    //下拉框单元右侧下拉框名称
                    disabled:false,     //组件是否被禁用
                    topOption:"请选择", //设置最顶部option的text属性
                    value:'',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                    textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                    valueField:"key",//设置下拉框value，填写数据中对应的字段名
                    datas: result.beans,         //数据源
                    loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                    dataReady:function(){
                        console.log("获取状态")
                    }
                });
                statusChangeSelect.setValue(1);
            });
            //缺陷状态
            Util.ajax.getJson( AjaxPath.project+'/dropdown?modual=defect&type=defectStatus&flowSwitch=true&systemId=', {}, function(result, isok){
                defectStatusChangeSelect = new Select({
                    el:$("#defectStatusList", $el),       //要绑定的容器
                    ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                        method:'GET'
                    },
                    label:'<i style="color:red;padding:2px;">*</i>状态:', //下拉框单元左侧label文本，可不配置
                    selectText:false,       //是否显示  ‘选择|清除’  模式
                    name:'status',    //下拉框单元右侧下拉框名称
                    disabled:false,     //组件是否被禁用
                    topOption:"请选择", //设置最顶部option的text属性
                    value:'',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                    textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                    valueField:"key",//设置下拉框value，填写数据中对应的字段名
                    datas: result.beans,         //数据源
                    loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                    dataReady:function(){
                        console.log("获取状态")
                    }
                });
                defectStatusChangeSelect.setValue(0);
            });
            //经办人
            // Util.ajax.getJson( AjaxPath.project+'/dropdown?modual=project&type=userId&systemId=', {}, function(result, isok){
            //     tryPeopleChangeSelect = new Select({
            //         el:$("#tryPeopleList", $el),       //要绑定的容器
            //         ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
            //             method:'GET'
            //         },
            //         label:'<i style="color:red;padding:2px;">*</i>经办人:', //下拉框单元左侧label文本，可不配置
            //         selectText:false,       //是否显示  ‘选择|清除’  模式
            //         name:'tryPeople',    //下拉框单元右侧下拉框名称
            //         disabled:false,     //组件是否被禁用
            //         topOption:"请选择", //设置最顶部option的text属性
            //         value:'',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
            //         textField:"value",   //设置下拉框内容，填写数据中对应的字段名
            //         valueField:"key",//设置下拉框value，填写数据中对应的字段名
            //         datas: result.beans,         //数据源
            //         loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
            //         dataReady:function(){
            //             console.log("经办人");
            //         }
            //     });
            //     tryPeopleChangeSelect.setValue('"'+ $cookie.get("userId") +'"');
            // });
            Util.ajax.getJson( AjaxPath.project+'/dropdown?modual=project&type=userId&systemId=', {}, function(result, isok){
                tryPeopleChangeSelect = new ComboSelect({
                    el:$("#tryPeopleList", $el),       //要绑定的容器
                    ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                        method:'GET'
                    },
                    checked:'0',        //默认选中
                    name:'tryPeople',    //下拉框单元右侧下拉框名称
                    value:'',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                    textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                    valueField:"key",//设置下拉框value，填写数据中对应的字段名
                    datas: result.beans,         //数据源
                    loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                    dataReady:function(){
                        console.log("经办人");
                    }
                });
                tryPeopleChangeSelect.setValue($cookie.get("userId") );
            });
            //提出人
            Util.ajax.getJson( AjaxPath.project+'/dropdown?modual=user&type=allUser', {}, function(result, isok){
                presentPeopleSelect = new ComboSelect({
                    el:$('#presentPeople',$el),       //要绑定的容器
                    name:'presentPeople',    //下拉框单元添加name属性
                    textField: 'value',
                    valueField: 'key',
                    loadAtClick:false,
                    datas: result.beans         //数据源与url模式可二选一
                });
                presentPeopleSelect.setValue($cookie.get("userId"));
                proposePerson($cookie.get("userId"));
                presentPeopleSelect.change(function(e){
                    proposePerson(presentPeopleSelect.getSelected().key);
                });
            });

            //发现迭代
            Util.ajax.getJson( AjaxPath.project+'/dropdown?modual=publish&type=sprints&systemId=', {}, function(result, isok){
                findesprintsChangeSelect = new Select({
                    el:$("#findSprintList", $el),       //要绑定的容器
                    ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                        method:'GET'
                    },
                    label:'<i style="color:red;padding:2px;"></i>发现迭代:', //下拉框单元左侧label文本，可不配置
                    selectText:false,       //是否显示  ‘选择|清除’  模式
                    name:'discoverySprint',    //下拉框单元右侧下拉框名称
                    disabled:false,     //组件是否被禁用
                    topOption:"请选择", //设置最顶部option的text属性
                    value:'',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                    textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                    valueField:"key",//设置下拉框value，填写数据中对应的字段名
                    datas: result.beans,         //数据源
                    loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                    dataReady:function(){
                        console.log("获取迭代");
                    }
                });
                findesprintsChangeSelect.setValue(0);

            });
            //修复迭代
            Util.ajax.getJson( AjaxPath.project+'/dropdown?modual=publish&type=sprints&systemId=', {}, function(result, isok){
                sprintsChangeSelect = new Select({
                    el:$("#sprintList", $el),       //要绑定的容器
                    ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                        method:'GET'
                    },
                    label:'<i style="color:red;padding:2px;"></i>迭代:', //下拉框单元左侧label文本，可不配置
                    selectText:false,       //是否显示  ‘选择|清除’  模式
                    name:'sprintId',    //下拉框单元右侧下拉框名称
                    disabled:false,     //组件是否被禁用
                    topOption:"请选择", //设置最顶部option的text属性
                    value:'',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                    textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                    valueField:"key",//设置下拉框value，填写数据中对应的字段名
                    datas: result.beans,         //数据源
                    loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                    dataReady:function(){
                        console.log("获取迭代");
                    }
                });

            });
            //优先级
            Util.ajax.getJson( AjaxPath.project+"/dropdown?modual=require&type=priStatus", {}, function(result, isok){
                addPriStatusSelsect = new Select({
                    el:$("#priStatusList", $el),       //要绑定的容器
                    ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                        method:'GET'
                    },
                    label:'<i style="color:red;padding:2px;">*</i>优先级:', //下拉框单元左侧label文本，可不配置
                    selectText:false,       //是否显示  ‘选择|清除’  模式
                    name:'priStatus',    //下拉框单元右侧下拉框名称
                    disabled:false,     //组件是否被禁用
                    topOption:"请选择", //设置最顶部option的text属性
                    value:'',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                    textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                    valueField:"key",//设置下拉框value，填写数据中对应的字段名
                    datas: result.beans,         //数据源
                    loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                    dataReady:function(){
                        console.log("优先级")
                    }
                });
                addPriStatusSelsect.setValue(['key','2']);
            });

            //是否变更单选
            var radiosConfig = {
                el:$("#isChangedRadios", $el),//要绑定的容器
                className:'radio',    //组件外围的className,默认横向|all-width纵向
                disabled:0,     //是否禁用，1禁用|0不禁用
                defaultValue:'1',   //默认选中项（对应单选框的value值）
                items:[
                    {
                        className:'radio2',   //单选框的className，可不配置
                        label:'是',    //必须配置
                        value:'1',      //必须配置
                        click:function(e,itemData){
                            //itemData 表示 该复选框的内容 { label:'',value:'' }
                            radios.set("1");
                            console.log('选中'+itemData.label)
                        }
                    },
                    {
                        className:'radio1',
                        label:'否',
                        value:'0',
                        click:function(e,itemData){ radios.set("0") }
                    }
                ]
            };
            radios = new Radios(radiosConfig);
        };
        //根据项目获取下拉
        function selectChange (sysId) {
            //状态
            Util.ajax.getJson( AjaxPath.project+"/dropdown?modual=require&type=requireStatus&flowSwitch=true&systemId="+sysId, {}, function(result, isok){
                statusChangeSelect.reload(result.beans);
                statusChangeSelect.setValue(1);
            });
            //缺陷状态
            Util.ajax.getJson( AjaxPath.project+"/dropdown?modual=defect&type=defectStatus&flowSwitch=true&flowFrom=&systemId="+sysId, {}, function(result, isok){
                defectStatusChangeSelect.reload(result.beans);
                defectStatusChangeSelect.setValue(1);
                $("#defectStatusList select", $el).removeAttr("name");
            });
            //经办人
            Util.ajax.getJson( AjaxPath.project+"/dropdown?modual=project&type=userId&systemId="+sysId, {}, function(result, isok){
                if(result.returnCode === "0000"){
                    result.returnCode = "0";
                    for(var i =0;i<result.beans.length;i++){
                        result.beans[i].name =  result.beans[i].value;
                        result.beans[i].value = result.beans[i].key;
                    }
                    result.beans.unshift({
                        "id":"0",
                        "name":"请选择",
                        "value":""
                    })
                    result.beans = JSON.parse(JSON.stringify(result.beans));
                }
                tryPeopleChangeSelect.reload(result.beans);
                tryPeopleChangeSelect.setValue( $cookie.get("userId") );
                (tryPeopleChangeSelect.getSelected().key===undefined)?(tryPeopleChangeSelect.setValue(0)):'';
                $("#tryPeopleList .combo-select select option").removeAttr("selected");
                $("#tryPeopleList .combo-select select option:first").attr("selected","selected").attr("disabled","");
                $("#tryPeopleList input[name='comboInput']").attr("placeholder", "请选择");
                //console.log((result.beans[0].key.toString())===$cookie.get("userId"))
            });
            //链接的缺陷
            Util.ajax.getJson(AjaxPath.project+'/dropdown?modual=require&type=linkInfo&systemId='+sysId, {}, function(result, isok){
                linksToSelect = new inputTag({
                    el:$('#linksTo', $el),       //必填 要绑定的容器
                    datas: result.beans,           //必填 数据源
                    addTag: false,             //必填  是否可以添加新标签
                    textField: 'value',
                    valueField: 'key',
                    placeholder:'请输入要链接的工作项',
                });
            });
            //关联用例
            Util.ajax.getJson(AjaxPath.project+'/dropdown?modual=defect&type=testcase&systemId='+sysId, {}, function(result, isok){
                relateToSelect = new inputTag({
                    el:$('#relateTo', $el),       //必填 要绑定的容器
                    datas: result.beans,           //必填 数据源
                    addTag: false,             //必填  是否可以添加新标签
                    textField: 'value',
                    valueField: 'key',
                    placeholder:'请输入要关联的用例',
                });
            });
            //修复迭代
            Util.ajax.getJson( AjaxPath.project+"/dropdown?modual=publish&type=sprints&systemId="+sysId, {}, function(result, isok){
                sprintsChangeSelect.reload(result.beans);
                sprintsChangeSelect.setValue(0);
            //发现迭代
                findesprintsChangeSelect.reload(result.beans);
                findesprintsChangeSelect.setValue(0);
            });
            //模块
            Util.ajax.getJson(AjaxPath.project+'/dropdown?modual=require&type=module&systemId='+sysId, {}, function(result, isok){
                /*moduleListSelect = new inputTag({
                    el:$('#moduleList', $el),       //必填 要绑定的容器
                    datas: result.beans,           //必填 数据源
                    addTag: false,             //必填  是否可以添加新标签
                    textField: 'value',
                    valueField: 'key',
                    placeholder:'请选择模块',
                    optionItemClick:function(){ //必填 点击时获取当前点击项的数据
                        return moduleListSelect.getSelected();
                    }
                });*/
                moduleListSelect.reload(result.beans);
            });
            //缺陷原因
            Util.ajax.getJson( AjaxPath.project + "/dropdown?modual=defect&type=defectReason", {}, function(result, isok){
                if(result.returnCode === "0000"){
                    result.returnCode = "0";
                    for(var i =0;i<result.beans.length;i++){
                        result.beans[i].name =  result.beans[i].value;
                        result.beans[i].value = result.beans[i].key;
                    }
                    result.beans.unshift({
                            "id":"0",
                            "name":"请选择"
                    })
                    result.beans = JSON.parse(JSON.stringify(result.beans));
                }
                defectReason = new ComboSelect({
                    el:$("#defectReason"),       
                    name:'defectReason',  
                    checked:"0",       
                    loadAtClick:false,
                    datas: result.beans   
                });   
                $("#defectReason input[name='comboInput']").attr("placeholder", "请选择");
            })
        }

        var initDate = function() {
            //提出日期
            proposeDate = new MyDate({
                el: $("#proposeDate", $el),
                inputClassName: 'date',
                label: '<i style="color:red;padding:2px;"></i>提出时间:',
                name: 'proposeTime',    //开始日期文本框name
                isReadOnly: true,  //项可设置日期输入框是否只读
                range: false,
                type: "date",
                isDisabled: false,//是否禁用组件
                defaultValue: nowTime(0,'yyyy-MM-dd'),
                btns: ['clear', 'now', 'confirm'],
                done: function(dates,value,proposeDate){
                    //planStartDate.options.min = dates; //设置结束日期的最小限制
                }
            });
            //计划开始日期
            planStartDate = new MyDate({
                el: $("#planStartDate", $el),
                inputClassName: 'date',
                label: '<i style="color:red;padding:2px;">*</i>计划开始时间:',
                name: 'starTime',    //开始日期文本框name
                isReadOnly: true,  //项可设置日期输入框是否只读
                range: false,
                type: "date",
                isDisabled: false,//是否禁用组件
                defaultValue:nowTime(0,'yyyy-MM-dd'),
                btns: ['now', 'confirm'],
                done: function(dates,value,planStartDate){
                    planFinishDate.options.min = dates; //设置结束日期的最小限制
                    proposeDate.options.max = dates; //设置提出日期的最大日期
                    if($('input[name=completionTime]').val() === ""){
                        $('input[name=likeMoreTime]').val("");
                    }else {
                        $('input[name=likeMoreTime]').val(computeDaysDelta(dates,$('input[name=completionTime]').val())*8);//计算预估工时
                    }
                }
            });
            //计划完成日期
            planFinishDate = new MyDate({
                el: $("#planFinishDate", $el),
                inputClassName: 'date',
                label: '<i style="color:red;padding:2px;">*</i>计划完成时间:',
                name: 'completionTime',    //开始日期文本框name
                isReadOnly: true,  //项可设置日期输入框是否只读
                min: 0,         //最小日期限制
                range: false,
                type: "date",
                isDisabled: false,//是否禁用组件
                inputPlaceholder:"请选择",
                defaultValue: '',
                btns: ['now', 'confirm'],
                done: function(dates,value,planFinishDate){
                    planStartDate.options.max = dates; //设置开始日期的最大日期
                    $('input[name=likeMoreTime]').val(computeDaysDelta($('input[name=starTime]').val(),dates)*8);//计算预估工时
                }
            });
        };
        //提出人提出组织
        var proposePerson = function (userId) {
            if(!userId){
                $("#presentDepartment", $el).val("");
                $("input[name='presentDepartment']", $el).val("");
                return;
            }
            Util.ajax.getJson( AjaxPath.auth+"/organs/byUser/"+ userId, {}, function(result, isok){
                if(result.returnCode==="0000") {
                    $("#presentDepartment", $el).val(result.beans.name);
                    $("input[name='presentDepartment']", $el).val(result.beans.id);
                }else{
                    $("#presentDepartment", $el).val('');
                    $("input[name='presentDepartment']", $el).val('');
                    console.log('查询组织信息异常!');
                }
            });
        };

        //多选
        var selMul = function(){
            //链接的缺陷
            Util.ajax.getJson(AjaxPath.project+'/dropdown?modual=require&type=linkInfo&systemId=', {}, function(result, isok){
                linksToSelect = new inputTag({
                    el:$('#linksTo', $el),       //必填 要绑定的容器
                    datas: result.beans,           //必填 数据源
                    addTag: false,             //必填  是否可以添加新标签
                    textField: 'value',
                    valueField: 'key',
                    placeholder:'请输入要链接的工作项',
                });
            });
            //标签
            Util.ajax.getJson(AjaxPath.project+'/dropdown?modual=require&type=tag', {}, function(result, isok){
                tagListSelect = new inputTag({
                    el:$('#tagList', $el),       //必填 要绑定的容器
                    datas: result.beans,           //必填 数据源
                    addTag: true,             //必填  是否可以添加新标签
                    textField: 'value',
                    valueField: 'key',
                    placeholder:'请输入标签',
                    maxlength:'20',
                });
            });
            //模块
            Util.ajax.getJson(AjaxPath.project+'/dropdown?modual=require&type=module&systemId=', {}, function(result, isok){
                moduleListSelect = new inputTag({
                    el:$('#moduleList', $el),       //必填 要绑定的容器
                    datas: result.beans,           //必填 数据源
                    addTag: false,             //必填  是否可以添加新标签
                    textField: 'value',
                    valueField: 'key',
                    placeholder:'请选择模块',
                });
            });
        };

        //附件
        var fileUp = function () {
            var uploadConfig = {
                el: $("#upload", $el), //组件绑定的容器
                className: 'upload', //组件外围的className
                url: AjaxPath.project+'/uploadFile/upload', //组件上传的后台接口
                // url: fileAjaxPath, //组件上传的后台接口
                // deleteUrl: 'data/upload.json?name=[name]', //组件上传的后台接口
                paramName:'textFile',
            };
            var filesUpload = new Upload(uploadConfig);


            filesUpload.on('submit',function(e,data){
                //formData的数据会和二进制数据一起提交到服务端
                data.formData = { creator:$cookie.get("userId"), businessType:'require', type:1 };
                // data.formData = { creator:1, businessType:'require', type:1 };
            });

            filesUpload.on('done',function(e,data){
                reqAttachmentIdList.push(data.result.files[0].attId);
            });
            filesUpload.on('remove',function(e,data){
                if(data.attId){
                    delFlag=true;
                    data=data.attId;
                };
                uploadDelete(e,data)
                //e新增自定义remove方法，可根据服务端文件处理结果删除文件列表中的当前行
            });

            filesUpload.on('download',function(e,data){
                if(data.attId){
                    delFlag=true;
                    data=data.attId;
                    uploadDown(e,data);
                };

            });
        };

        function uploadDelete(e,data){
            //e新增自定义remove方法，可根据服务端文件处理结果删除文件列表中的当前行
            if(delFlag){
                new Dialog({
                    title: '提示', //弹窗标题，
                    content: '<div style="text-align:center;margin-top:50px">确定要删除该附件吗？</div>', //弹窗内容，可以是字符串、html代码段,tpl对象。默认为loading状态（由点组成的圈。大段代码建议使用 tpl。
                    okValue: '确&nbsp;&nbsp;定', //确定按钮的文本 默认是 ‘ok’
                    ok: function() {
                        Util.ajax.getJson(AjaxPath.project+'/attachment/delete/'+data, {}, function(result, isok){
                            if(result.returnCode==='0000'){
                                reqAttachmentIdList = $.grep(reqAttachmentIdList,function(i,n){
                                    return i!= data;
                                },false);
                                console.log(reqAttachmentIdList);
                                e.remove();
                                new Dialog({
                                    mode: 'tips',
                                    delayRmove:3, //延迟删除秒数设定 tips默认3秒,非tips默认不关闭。
                                    tipsType:'tips', //tips类型；可选 success | error，默认普通tips。
                                    maxWidth:'226px', //设置tips对话框的最大宽度,默认为226px。仅在tips对话框下生效，该项存在时，width属性将失效。
                                    content: '删除附件成功！'
                                });
                            }else{
                                new Dialog({
                                    mode: 'tips',
                                    delayRmove:3, //延迟删除秒数设定 tips默认3秒,非tips默认不关闭。
                                    tipsType:'tips', //tips类型；可选 success | error，默认普通tips。
                                    maxWidth:'226px', //设置tips对话框的最大宽度,默认为226px。仅在tips对话框下生效，该项存在时，width属性将失效。
                                    content: '删除附件失败！'
                                });
                            }
                            return true;
                        });
                    },
                    cancel: function() {},
                    cancelValue: '取&nbsp;&nbsp;消', //取消按钮的文本 默认是 ‘关闭’
                    width: 300,
                    height: 120,
                    modal:true,
                });
            }else{
                e.remove();
            }
        };
        function uploadDown(e,data){
            //e新增自定义remove方法，可根据服务端文件处理结果删除文件列表中的当前行
            if(delFlag){
                window.location.href=AjaxPath.project+'/uploadFile/download?id='+data;
            }else{

            }
        };


        var addRequireValidation = function() {
            addReqValidation = new Validator({
                el: $(".addRequirementForm", $el),
                submitBtn: $(".addRequireBtn"), //触发验证的按钮，可不配置
                dialog: true, //是否弹出验证结果对话框
                pattern: { numberThree: "^(\\d+\\.\\d{1,1}|\\d+)$" },
                rules: {
                    requireTitle: "required",
                    systemId: "required",
                    requireType: "required",
                    severity: "required",
                    tryPeople: "required",
                    priStatus: "required",
                    status: "required",
                    starTime: "required",
                    completionTime: "required",
                    likeMoreTime: "numberThree",
                    reallyUseTime: "numberThree"
                },
                messages: {
                    requireTitle: {
                        required: "工作项名称不能为空！"
                    },
                    systemId: {
                        required: "归属项目不能为空！"
                    },
                    requireType: {
                        required: "类型不能为空！"
                    },
                    severity: {
                        required: "严重程度不能为空！"
                    },
                    tryPeople: {
                        required: "经办人不能为空！"
                    },
                    priStatus: {
                        required: "优先级不能为空！"
                    },
                    status: {
                        required: "状态不能为空！"
                    },
                    starTime: {
                        required: "计划开始时间不能为空！"
                    },
                    completionTime: {
                        required: "计划完成时间不能为空！"
                    },
                    likeMoreTime:{
                        numberThree: "此项必须为数字(非负数，可保留一位小数)！"
                    },
                    reallyUseTime:{
                        numberThree: "此项必须为数字(非负数，可保留一位小数)！"
                    }
                }
            });
        };

        var saveRequiretValidation = function() {
            var addTag = {
                createPerson:$cookie.get("userId"),
                tags:tagListSelect.getCheckSelectTag(),
                createModule:'require'
            };
            if(addReqValidation.form()) {
                //创建新标签
                Util.ajax.postJson(AjaxPath.project+'/tag',JSON.stringify(addTag), function(tagResult, isok) {
                    if(tagResult.returnCode==="0000") {
                        tagListSelectList = [];
                        $(tagResult.beans).each(function (index,item) {
                            tagListSelectList.push(item.id ? item.id : item.key );
                        });
                        saveAddRequrie();
                    } else {
                        new Dialog({
                            mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                            title:'提示',
                            width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                            height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                            cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                            modal:true,
                            content: '<div style="text-align:center;margin-top:50px">'+tagResult.returnMessage+'</div>' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                        });
                    }
                },"application/json");
            } else {
                console.log('验证失败');
            }
        };

        var saveAddRequrie = function(e) {
            var saveAddRequrieDia = null;
            var handLoading = new Loading(loadingConfig);
            var addReqData = Form.serialize($('.addRequirementForm', $el));
            addReqData.presentPeople = presentPeopleSelect.getSelected().key;
            addReqData.systemId = sysTemSelect.getSelected().key;
            addReqData.linkIdAndTypes = linksToSelect.getCheckSelectTag('key');
            addReqData.changeStatus = radios.get();
            addReqData.tagIdList = tagListSelectList;
            addReqData.moduleIdList = moduleListSelect.getCheckSelectTag('key');
            addReqData.attachmentIdList = reqAttachmentIdList;
            addReqData.creater=$cookie.get("userId");
            if(addReqType.getSelected().key === 4){
                addReqData.discoverySprint = findesprintsChangeSelect.getSelected().key;
                addReqData.status = defectStatusChangeSelect.getSelected().key;
                addReqData.importStatus = severity.getSelected().key;
                addReqData.relationCaseIds = relateToSelect.getCheckSelectTag('key');
            }else{
                addReqData.status = statusChangeSelect.getSelected().key;
            }
            addReqData.defectReason = defectReason.getSelected().key;
            addReqData.systemId = $cookie.get("projectSelectId");
            var saveAddRequrieDiaConfig = {
                mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                title:'提示',
                width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                modal:true,
                content: '' ,// 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
            };

            Util.ajax.postJson(AjaxPath.demand+"/requires", JSON.stringify(addReqData), function(result, isok) {
                handLoading.destroy();
                if(result.returnCode==="0000") {
                    saveAddRequrieDiaConfig.content = '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>'
                    saveAddRequrieDia = new Dialog(saveAddRequrieDiaConfig);
                    saveAddRequrieDia.on('onclose',function(){
                        back();
                    });
                } else {
                    saveAddRequrieDiaConfig.content = '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>'
                    saveAddRequrieDia = new Dialog(saveAddRequrieDiaConfig);
                }
            },"application/json");
        };

        var createLoading = function(){
            loadingConfig = {
                el:'body',                  //组件要绑定的容器，默认为body（此项可不配置或留空）
                className:'loading',           //组件外围的className
                position:'center',      //提示信息位置，顶部top|默认center中央
                width:'300',      //loading的宽度,非必须，默认300
                height:'auto',      //loading的宽度,非必须，默认auto
                mask:1,                 //是否显示遮罩， 0不显示|默认1显示
                animate:1,              //是否显示动画效果， 0不显示|默认1显示
                mode:'layer',     //展示方式 loadingLine线条方式|默认layer弹层方式
                text:'加载中...',       //提示文字，默认 加载中...
                icon:'dotCycle',  //文字前面的gif动画， 默认dotCycle有点组成的圈|cmcc移动图标|cmccLarge大的移动图标
            }
        };

        return initialize;

    });

